thinkphp6模板中输出的html被转义的解决方案

2022-09-16 23:41 栏目:技术开发 查看(12680)

在thinkphp5升级为了thinkphp6后,发现一些文章内页的富文本区域直接显示的是html源代码,而没有解析,查看页面源码发现html是被转义成实体了。如图所示:

微信截图_20220916223521

虽然内容本身在数据库存储的时候是被转成实体了,但是在输出给模板前已经通过htmlspecialchars_decode处理了,按理应该不会这样。但是实际上,从thinkphp5.1开始thinkphp自带的模板引擎think-template会“自作主张”在解析模板的时候使用htmlentities方法进行全部字符实体化。如下图就是thinkphp自带模板引擎解析模板文件生成的原生php代码:

微信截图_20220916224523

实际上从thinkphp5开始thinkphp官方号称就是面向API应用开发;随着现在技术模式的演进,越来越多的web应用开始采用前后端分离的方式,因此在thinkphp6默认情况下是不支持模板引擎的,需要手动按照模板引擎think-template。如下是官方关于视图(也就是传统的模板)的说明:

微信截图_20220916225530

基本的原理已经清楚了,那就是新版的thinkphp模板引擎在解析模板文件为原生php代码的时候,会自行对echo的内容进行htmlentities处理,那么解决这个问题的办法就是消除htmlentities方法的影响。以下提供几个方法来解决这个问题:

1、使用{$content|raw}(推荐这种方式,简单明了)

这个方法的作用就是告诉模板引擎别给我瞎加htmlentities来处理,这样解析出来的原始代码就没有强制加上htmlentities方法,自然就按照后端给的是什么内容就输出原始的内容;加上raw就是袁术内容输出的意思。如下图加上raw解析的就没有

微信截图_20220916231335

2、原生php代码输出内容

这样模板引擎就不会去解析这部分代码,自然也就不会私自添加htmlentities方法来处理内容了。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:thinkphp6模板中输出的html被转义的解决方案 - 微构网络
分享: